package com.hmall.common.config;

import com.hmall.common.interceptors.UserInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * ClassName: MvcConfig
 * Package: com.hmall.common.config
 * Description:
 *
 * @Author zhangdingye
 * @Create 2025/5/11 下午2:44
 * @Version 1.0
 */
@Configuration
/*
ConditionalOnClass条件配置：只有在类路径中存在 DispatcherServlet.class 时，配置类才会被加载和生效。
那为什么要加上ConditionalOnClass(DispatcherServlet.class)  注解？
因为gateway（网关模块）没有Web 环境，也就是不包含Spring MVC相关依赖。如果不加ConditionalOnClass(DispatcherServlet.class)  注解，
那么gateway启动时，会出现错误，找不到WebMvcConfigurer.class：
又因为DispatcherServlet 是 Spring MVC 的核心组件，如果应用包含 Spring MVC 相关依赖（如 spring-boot-starter-web），
则会自动包含 DispatcherServlet。所以即使没有 Web 环境，Spring Boot会忽略带有该注解的配置类，不会尝试加载和执行Web相关的配置，避免了错误。
 */
@ConditionalOnClass(DispatcherServlet.class)
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserInterceptor());
    }
}
